#ifndef RTAPI_MATH_I386_H
#define RTAPI_MATH_I386_H

#define MATHOP(f, i)                                       \
    extern __inline double f(double __x)                   \
    {                                                      \
        register double __result;                          \
        __asm __volatile__(i : "=t"(__result) : "0"(__x)); \
        return __result;                                   \
    }

MATHOP(sin, "fsin")
MATHOP(cos, "fcos")
MATHOP(fabs, "fabs")
MATHOP(sqrt, "fsqrt")

extern __inline double tan(double __x)
{
    register long double __value;
    register long double __value2 __attribute__((__unused__));
    __asm __volatile__("fptan" : "=t"(__value2), "=u"(__value) : "0"(__x));
    return __value;
}

extern __inline double atan2(double __y, double __x)
{
    register long double __value;
    __asm __volatile__("fpatan" : "=t"(__value) : "0"(__x), "u"(__y) : "st(1)");
    return __value;
}
#endif /* RTAPI_MATH_I386_H */
